#ifndef _SE_ENTRYPOINT_
#define _SE_ENTRYPOINT_

// Events system.
#include "Events/MouseEvent.h"
#include "Events/WindowEvent.h"
#include "Events/KeyboardEvent.h"
#include "Events/ApplicationEvent.h"

// Global context.
#include "Core/GlobalContext.h"

// Application stuffs.
#include "Render/Camera.h"
#include "Scene/Scene.h"
#include "Scene/Entity.hpp"
#include "Core/Application.h"

extern SE::Application* SE::CreateApplication();

int main()
{
    using namespace SE;

    SE_PROFILE_BEGIN_SESSION("Startup", "SEProfile-Startup.json");
    GlobalContext::Start();
    auto app = CreateApplication();
    app->start();
    SE_PROFILE_END_SESSION();

    SE_PROFILE_BEGIN_SESSION("Runtime", "SEProfile-Runtime.json");
    app->run();
    SE_PROFILE_END_SESSION();

    SE_PROFILE_BEGIN_SESSION("Shutdown", "SEProfile-Shutdown.json");
    app->shutdown();
    delete app;
    GlobalContext::Shutdown();
    SE_PROFILE_END_SESSION();
}

#endif // !_SE_ENTRYPOINT_